23

» WarCraft 3 / У меня есть 2 вопроса.

Похожие вопросы:

ответ
юнит получает урон
1 ответ на 2 вопроса
ответ
  1. в 1 вопросе может быть лишь 1 вопрос
  2. если для юнита то просто меняй размер юнита в ро иначе смотри пункт 2
  3. раздел 4
  4. уже ответили иначе смотри пункт 2
ответ
кхе, всё вроде можно, но объяснять долго, третье простое, просто при юзании способности в триггерах добавь условие сравнения, если юнит цель применяемой способности нежить, тогда действие о дополнительном уроне, например если способность наносит 100, то 20% это 20,в действии приказать применяющий юнит нанести урон юнит цель применяемой способности 100+(0.20х100), перед этим 100 можно установить, как переменную, например если с каждым уровнем урон растёт на 100, то переменная int=100хУровень способности способность у применяющий юнит.
Сложно объяснил?
ответ
Можно через "or":
exitwhen ( a == b ) or ( j > i )
ответ
При нажатии удара грома
Используйте Get\SetUnitUserData для героя, он должен иметь собственную привязку структуры.
Так-же должна быть структура дамика, в которой будет таймер с шагами относительно времени на 1 сек 25 шагов, с долей в 0,04 сек за 1 шаг.
Структура дамика должна быть сохранена в UnitUserData дамми юнитов.
Вычислит середину времени к пример 5 сек тамера, где его середина является 2,5 ~ (62 шаг приблизительно )
Если тек. шаг == 62 то
Создать Даммик(Пехотинец)
СтруктураГероя->Пехотинец=ЮнитПехотинца
КонецЕсли
Если время пребывания пехотинца оконченное, или он по непоняткам смотал ранее, то очищаем в структуре геря его.
При нажатии на гром. поступь:
Проверяем наличие пехотинца в геройской структуре..
Есть Пехотинец? Да => Создаём Варлока, Нет => Не создаём (Ну, и занести варлока в переменную структуры героя с именем варлока, если не надо плодить другого варлока, также с пехотинцем)
Надеюсь, что я понятно изъяснил.

23

» WarCraft 3 / Как выбрать в триггере всех игроков?

Похожие вопросы:

ответ
реализуй эту функцию сам
создай переменную типа int и перебери всех юнитов игрока на карте
и для каждого из них увеличивай int на 1
в результате значение int будет равно количеству юнитов на карте
ответ
Что за чушь ты тут описал? Просто когда спасатели прилетают, паузи таймер, а при перезапуске игры, запускай его по новой(с тем же ожиданием)
Кстати, идея норм. Можешь скинуть? А то я не удержусь, и стырю её у тебя :D
ответ
Astra:
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
Во время инициализации карты в стартовой позиции игрока создается 1 висп.
Заменил триггер на другой, все заработало.
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Увы, не работает.
Одним словом, я просто взял модель виспа, удалил у него все анимации, кроме stand, импортировал в карту, прописав путь к файлу, как к файлу модели оригинального виспа.
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
ответ
Filius Dei:
я так и не понял почему ты не можешь просто сделать как улучшение что не так с улучшением как в обычном случае.
дело в описании, вот и не могу так сделать,если сделать через улучшение здания, то при наведении на иконку вплывает подсказка, та же подсказка что будет и у самого здания в списке построек у светлячка, тоесть если делать через улучшение (по идее этот же юнит должен быть и в списке построек (а он там есть) ту подсказку которую я хочу будет лишней. вот пример: Древо жизни превращается в древо мира, при этом все союзные юниты вблизи древа получают повышеную регенерацию здоровья. (а теперь представь что эта подсказка будет в списке построек у светлячка, вообще не то)
Решил проблему путем выбора древа когда истекает однократный таймер, также подумал и решил что наверно лучше делать через способности, а не исследования. Но у меня остался один вопрос, если этот тригер отвечающий за применения этих способностей будет использовать несколько игроков, я не знаю будет ли использоватся оно коректно или нет, также и с отдельным триггером Таймер. Вот что вышло в данный момент:

23

» WarCraft 3 / День/ночь

Похожие вопросы:

ответ
Denis55:
Sergey34:
Бля ,да че вы мучаетесь ночью в полночь делаем random integer между 1 и 100 и если равен integer 10 -то это 1 % если 1.2.3.4.5.6.7.8.9.10 - то 10% шанс превращения остальные вообще ничего не делаем - я бы за пару часов такое сделал но да только вряд ли мне согласятся заплатить))
так там при каждом превращение определяется время суток и если день то шанс на превращение 10% а если ночь то 50% т.е в любое время ночи если клацнуть превращение в воргена медведя то есть шанс (ночью) в 50 процентов обезуметь стать волком. Днём же этот шанс меньше.
Хотя правда я ничего не понял из того что ты написал и не уверен триггерное ли ты мне предлагаешь . Вот взгляни если не трудно ... (мне осталось шанс сделать а я не понимаю как :с) да и просто посмотри может вообще не правильно это. static2.keep4u.ru/2015/09/23/PT.png
Я тебе говорю триггер который срабатывает когда наступает полночь - random integer 1-100 когда какая нибудь из 10 цифр выпадает превращайся в волка - другие в медведя или напиши мне в личку там подробнее обьясню
и вообще - зачем непосредственно превращаться в медведя способностью?
Не проще подменять персонажей во время превращения? Я так делал - так удобнее
ответ
ssbbssc, не неси чушь. FrameDef (.fdf) файлы хранящие расположение частей интерфейса, их внешний вид и тд. Можно даже свою кнопку добавить и тд, только эффект ей без внешних длл не припишешь. Лежат в мпкью по пути UI\FrameDef\
ответ
Если у вас не анло-язычный jpng, а xgm'ский(5d), то это бесполезно. Всегда будет ночь, лучше попробуйте новую сборку jpng: Jass New Gen Pack - Rebuild 1.3 , надеюсь поможет.
ответ
С помощью клавиши L (по умолчанию).
Эта кнопка регулирует яркость, а если время суток, то через Файл->Параметры->Визуальные->Фикс. время суток(...).

23

» WarCraft 3 / Крашится карта

Похожие вопросы:

ответ
Крашлог и карту желательно, мб где то пропустили скобку?
ответ
приложи лучше .txt файл с крашем из папки /errors
ответ
biridius:
скинь хоть сам файл ошибки, из папки Errors (в папке с варом) там текстовые файлы, найди с нужной датой/временем
иначе ничего не понятно
Может расскажите лучше как я сам с этим текстовым файлом смогу решить эту проблему)?
+ я там сверху кусок скинул
Кароче - вот

x86 Registers

EAX=00000000 EBX=00000000 ECX=0EEA0020 EDX=0EEAE0A8 ESI=001985EC
EDI=00000000 EBP=0EE70088 ESP=0019842C EIP=00000000 FLG=00010202
CS =0023 DS =002B ES =002B SS =002B FS =0053 GS =002B

Stack Trace (Manual)

Address Frame Logical addr Module
00000000 0EE70088 0000:00000000 C:\Program Files (x86)\WarCraft III - 1.26\war3.exe

Stack Trace (Using DBGHELP.DLL)

6F45862F Game.dll GameMain+4517343 (0x00000000,0x00000000,0x00000000,0x00000000)

Loaded Modules

0x00400000 - 0x0047D000 C:\Program Files (x86)\WarCraft III - 1.26\war3.exe
0x15000000 - 0x15061000 C:\Program Files (x86)\WarCraft III - 1.26\Storm.dll
0x21100000 - 0x2115F000 C:\Program Files (x86)\WarCraft III - 1.26\mss32.dll
0x22600000 - 0x22616000 C:\Program Files (x86)\WarCraft III - 1.26\redist\miles\Mssfast.m3d
0x22700000 - 0x22717000 C:\Program Files (x86)\WarCraft III - 1.26\redist\miles\Mssdolby.m3d
0x22C00000 - 0x22C18000 C:\Program Files (x86)\WarCraft III - 1.26\redist\miles\Msseax2.m3d
0x24600000 - 0x24611000 C:\Program Files (x86)\WarCraft III - 1.26\redist\miles\Reverb3.flt
0x26F00000 - 0x26F2A000 C:\Program Files (x86)\WarCraft III - 1.26\redist\miles\Mp3dec.asi
0x60000000 - 0x6005D000 C:\Program Files (x86)\WarCraft III - 1.26\ijl15.dll
0x63EB0000 - 0x647DB000 C:\WINDOWS\System32\DriverStore\FileRepository\c0318486.inf_amd64_11ba0b4b7cc81d52\atiumdag.dll
0x647E0000 - 0x6487B000 C:\WINDOWS\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9348_none_d08c1480442bf1e1\MSVCR80.dll
0x64AC0000 - 0x64B4E000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.16299.64_none_2c284a8117b59840\COMCTL32.dll
0x669D0000 - 0x66B4B000 C:\WINDOWS\System32\DriverStore\FileRepository\c0318486.inf_amd64_11ba0b4b7cc81d52\aticfx32.dll
0x66FB0000 - 0x66FD6000 C:\WINDOWS\SYSTEM32\cryptnet.dll
0x66FF0000 - 0x66FF6000 C:\WINDOWS\SYSTEM32\detoured.dll
0x67000000 - 0x67020000 C:\WINDOWS\SYSTEM32\amdihk32.dll
0x679C0000 - 0x679E7000 C:\WINDOWS\System32\DriverStore\FileRepository\c0318486.inf_amd64_11ba0b4b7cc81d52\atiu9pag.dll
0x67A80000 - 0x67A88000 C:\WINDOWS\SYSTEM32\AVRT.dll
0x67A90000 - 0x67AEB000 C:\WINDOWS\System32\MMDevApi.dll
0x67AF0000 - 0x67BE4000 C:\WINDOWS\SYSTEM32\AUDIOSES.DLL
0x67BF0000 - 0x67C12000 C:\WINDOWS\System32\DEVOBJ.dll
0x6C190000 - 0x6C1AE000 C:\WINDOWS\SYSTEM32\gpapi.dll
0x6C1B0000 - 0x6C1DF000 C:\WINDOWS\system32\rsaenh.dll
0x6C280000 - 0x6C30C000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
0x6C310000 - 0x6C544000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
0x6C550000 - 0x6C5C7000 C:\WINDOWS\SYSTEM32\TextInputFramework.dll
0x6C5D0000 - 0x6C69E000 C:\Windows\System32\Windows.UI.dll
0x6E0D0000 - 0x6E19B000 C:\WINDOWS\SYSTEM32\wintypes.dll
0x6F000000 - 0x6FBB5000 C:\Program Files (x86)\WarCraft III - 1.26\Game.dll
0x70BB0000 - 0x70C66000 C:\WINDOWS\SYSTEM32\d3d8.dll
0x70DF0000 - 0x70DF8000 C:\WINDOWS\SYSTEM32\WINNSI.DLL
0x712B0000 - 0x7138F000 C:\WINDOWS\SYSTEM32\OPENGL32.dll
0x71C40000 - 0x71C65000 C:\WINDOWS\SYSTEM32\GLU32.dll
0x71C70000 - 0x71CF0000 C:\WINDOWS\SYSTEM32\DSOUND.DLL
0x72000000 - 0x72007000 C:\WINDOWS\SYSTEM32\d3d8thk.dll
0x726B0000 - 0x726D3000 C:\WINDOWS\system32\dwmapi.dll
0x72710000 - 0x72789000 C:\WINDOWS\system32\uxtheme.dll
0x72790000 - 0x72A54000 C:\WINDOWS\SYSTEM32\WININET.dll
0x72BE0000 - 0x72C35000 C:\WINDOWS\SYSTEM32\mswsock.dll
0x73980000 - 0x73AFA000 C:\WINDOWS\System32\PROPSYS.dll
0x73C50000 - 0x73C63000 C:\WINDOWS\SYSTEM32\CRYPTSP.dll
0x73CE0000 - 0x73D08000 C:\WINDOWS\SYSTEM32\ntmarta.dll
0x73D10000 - 0x73D34000 C:\WINDOWS\SYSTEM32\dbgcore.DLL
0x73D40000 - 0x73EC1000 C:\WINDOWS\SYSTEM32\dbghelp.dll
0x73F30000 - 0x73F49000 C:\WINDOWS\SYSTEM32\bcrypt.dll
0x73F50000 - 0x73F80000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
0x74240000 - 0x74263000 C:\WINDOWS\SYSTEM32\WINMMBASE.dll
0x742D0000 - 0x742F4000 C:\WINDOWS\SYSTEM32\WINMM.dll
0x74370000 - 0x74378000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
0x743A0000 - 0x743A8000 C:\WINDOWS\SYSTEM32\VERSION.dll
0x743B0000 - 0x743BA000 C:\WINDOWS\System32\CRYPTBASE.dll
0x743C0000 - 0x743E0000 C:\WINDOWS\System32\SspiCli.dll
0x743E0000 - 0x74423000 C:\WINDOWS\System32\sechost.dll
0x74430000 - 0x74500000 C:\WINDOWS\System32\KERNEL32.DLL
0x74500000 - 0x74522000 C:\WINDOWS\System32\GDI32.dll
0x74530000 - 0x74575000 C:\WINDOWS\System32\SHLWAPI.dll
0x74580000 - 0x74587000 C:\WINDOWS\System32\NSI.dll
0x74590000 - 0x74767000 C:\WINDOWS\System32\KERNELBASE.dll
0x747D0000 - 0x748E7000 C:\WINDOWS\System32\ucrtbase.dll
0x748F0000 - 0x7496C000 C:\WINDOWS\System32\msvcp_win.dll
0x74970000 - 0x74AB4000 C:\WINDOWS\System32\MSCTF.dll
0x74AC0000 - 0x74ACE000 C:\WINDOWS\System32\kernel.appcore.dll
0x74AE0000 - 0x74B46000 C:\WINDOWS\System32\WS2_32.dll
0x74B50000 - 0x74CD2000 C:\WINDOWS\System32\CRYPT32.dll
0x74CE0000 - 0x74CEE000 C:\WINDOWS\System32\MSASN1.dll
0x74CF0000 - 0x74DAD000 C:\WINDOWS\System32\msvcrt.dll
0x74DB0000 - 0x74DF6000 C:\WINDOWS\System32\WINTRUST.dll
0x74E00000 - 0x74F5F000 C:\WINDOWS\System32\gdi32full.dll
0x74FC0000 - 0x762F3000 C:\WINDOWS\System32\SHELL32.dll
0x76360000 - 0x76457000 C:\WINDOWS\System32\ole32.dll
0x76460000 - 0x764B7000 C:\WINDOWS\System32\bcryptPrimitives.dll
0x764C0000 - 0x76538000 C:\WINDOWS\System32\ADVAPI32.dll
0x76540000 - 0x765C8000 C:\WINDOWS\System32\shcore.dll
0x765D0000 - 0x76816000 C:\WINDOWS\System32\combase.dll
0x76820000 - 0x768F4000 C:\WINDOWS\System32\comdlg32.dll
0x76900000 - 0x769BE000 C:\WINDOWS\System32\RPCRT4.dll
0x76F60000 - 0x76F74000 C:\WINDOWS\System32\profapi.dll
0x76FB0000 - 0x76FE8000 C:\WINDOWS\System32\cfgmgr32.dll
0x76FF0000 - 0x775B6000 C:\WINDOWS\System32\windows.storage.dll
0x775C0000 - 0x775D6000 C:\WINDOWS\System32\win32u.dll
0x775E0000 - 0x77755000 C:\WINDOWS\System32\USER32.dll
0x777F0000 - 0x77872000 C:\WINDOWS\System32\clbcatq.dll
0x77880000 - 0x778C5000 C:\WINDOWS\System32\powrprof.dll
0x778D0000 - 0x778F5000 C:\WINDOWS\System32\IMM32.dll
0x77900000 - 0x77993000 C:\WINDOWS\System32\OLEAUT32.dll
0x779A0000 - 0x77B2D000 C:\WINDOWS\SYSTEM32\ntdll.dll
дальше уже - Memory Dump
Так... Щас обнаружил что это у меня такая херня со всеми картами которые я сохранял в невгене... ВСЕ запутанее и странееее...
Проблема решилась переустановкой редактора повторным сохранением карты. Дело было в конфликте программы мусорщика ВСЕМ СПС.

23

» WarCraft 3 / Подсчет игроков

Похожие вопросы:

ответ
вот и получаем общий статы вссех героев
count_hero_created - Количество героев созданых на карте оно будет расти как будет создавать
heroes - массив героев
и можете спокойно получать из данных all_stats в любом месте куда хочеш

23

» WarCraft 3 / Редактор карты

Похожие вопросы:

ответ
Делать свой ИИ, либо в редакторе ИИ, либо писать самому.
Ещё можешь дописать своих юнитов в стандартные скрипты.
ответ
Хух, понеслось:
  1. Открыл карту, нажми сохранить (путь к карте не должен содержать русских букв) и сразу зайди в раздел "Extensions" - "Edit tileset".
  2. Выбрал нужные тайлсеты, нажми ок, карта сохранится (или сохрани сам) и тогда выходи из карты.
  3. Заходи в карту.
ответ
Открывается модель в программе "War3ModelEditor". Там нажимаешь Windows - Texture Manager. Жмёшь на пустое правой кнопкой мыши и импортируешь свою. Затем переходишь в Material Manager, там выбираешь каждый материал, ищешь там раскрывающийся список с текстурами, и выбираешь свою вместо той которая была там. Когда закроешь Материалы, увидишь свою модель с новой текстурой. Затем всё сохраняешь.
Открываешь редактор World Editor. Нажимаешь в Модулях - Менеджер импорта. Там импортируешь свою модель, и текстуру. Какой путь был в "War3ModelEditor" - Texture Manager, такой же путь должен писаться и здесь. Но убери "war3mapImported\" и перезагружай редактор после импортирования туда каждого файла! Написал на память. Вопросы?
ответ
Ну качаешь остюда JNGP, тут поправлено туча багов, спс Ханашиби.
Ставим по инструкции, запускаем ро, потом отрубаем USWE опции вроде там кастом тайслетов да кастом гуи триггеров, оно нафиг ненадо и нередко ломает совместимость с другими редакторами карт wc3.
Сжасс там есть, все должно изи работать.
Если нужен мемхак, скину код из своей карты с инструкциями что к чему.
Еще вопросы?

23

» WarCraft 3 / Локальный игрок

Похожие вопросы:

ответ
Создавать нельзя, на сколько я помню, а вот скрывать и отображать, а также менять текст и иконку - сколько угодно.
ответ
Во-первых, "хочется взять и в***ать учебником русского языка" ©
Во-вторых, перевожу на человеческий написанное топик стартером. Ему нужны локальные магазины, для каждого героя. Делает он что-то типа хироарены, и хочет что бы магазин со способностями мага был недоступен для воина. С другими героя соответственно.
В-третьх, это делается действительно через GetLocalPlayer(), другое дело что топик стартер не умеет этим пользоваться.
ответ
Решил проблему следующим путем: при несовпадении данных в Memory, заставляем читера выделить специального скрытого в тумане войны юнита, а в другом триггере по событии выделения пишем, что GetTriggerPlayer() - МХшник, и только потом кикаем его.
quq_CCCP:
Для бана нужна работа с хост ботом
Ты неправильно понял. Если люди по Гарене играют, то они должны знать, что игрок отключается по неуважительной причине, чтобы сразу его забанить и потом не париться с ним. Бан-то локальный в Гарене, не то что на хост-боте.
ответ
Можно сделать локально прозрачность, а если и управлять не нужно, то добавить москитов и будет не видимый юнит для других игроков

23

» WarCraft 3 / Jass Сложный скилл

Похожие вопросы:

ответ
Hanuman, для начала выучить джасс и прочитать статьи xgm.guru/p/wc3/articles
так же научится редактировать данные юнитов через hex редактор
потом делать как сказал ScopteRectuS

23

» WarCraft 3 / Function main

Похожие вопросы:

ответ
Итак. Комментарии на кириллице убраны, и всё заработало. Но потом я всё же переименовал файл скрипта)
ответ
Проблема возникает также при переносе вот этого вот в инициализацию триггера тест.
Но при этом если вместо строки вроде "12345" использовать, например, GetAbilityName('Aloc') - то все работает.
Это какой-то баг со строками?
Еще у меня почему-то происходит фантомный клик по центру карты в начале игры
Вобщем не стоит юзать имена функций напрямую в экзекуте и вообще таймеры лучше
ответ
Нашел ошибку:
В функции SuicideUnits (в самом низу) должно находиться строго 10 значений. У меня 9. Если приписать еще 0, то все работает.

23

» WarCraft 3 / War3ME ошибка

Похожие вопросы:

ответ
Гммм... В первый раз о подобном слышу. Как "лечить" я не знаю, но как вариант можно скачать нужную версию игры и взять нужный архив вместо повреждённого оттуда. Примерно таким образом я избавился от проблем со своей версией, связанных с отсутствием музыки и стандартных реплик, а также отказом воспринимать большУю часть импортированных звуков.
ответ
~8gabriel8:
PrincePhoenix, там геосеты есть, но материалов мало. Я пробовал сделать дополнительный материал для геосетов, чтобы тот в нужных анимациях исчезал, но там в материале текстура доспехов и тимколора. Почему-то в нужной анимации пропадает текстура доспехов, но щит мигает тимколором. Мне разбираться сейчас некогда, срочно возникли дела, может быть он скинет сюда модель, чтобы посмотрели.
P. S. А в игре всё нормально, только в w3me мигало почему-то)

23

» WarCraft 3 / Компания и герой...

Принятый ответ
Похожие вопросы:

ответ
Артас Менетил:
Ну нет. Не всегда удобно ковыряться в чужих картах. Объясню на пальцах.
Есть категория действий "Буфер игры". Вот что в ней есть:
  1. Create game cache - создать кэш с указанным именем. Если в двух разных картах создать кэши с одними и теми же именами, то кэш будет общим - можно переносить информацию с одной карты на другую.
  2. Save unit/integer/real/boolean/string - сохраняет переменную (если юнит, то все его параметры) в кэш.
  3. Save cache. После записи чего-ибо в кэш его следует сохранить
  4. Load unit - загружает юнита из кэша и создаёт его на карте.
Чтобы загрузить из кэша переменную, это следует делать при помощи функций этого типа.
ответ
SomeFire, У него 3 круга
вернее 6
ответ
Буфер игры - создать буфер с именем ...
Буфер игры - сохранить юнит как ...
Буфер игры - сохранить последний созданный буфер

Буфер игры - создать буфер с именем ...
Буфер игры - восстановить юнит из ... буфера

23

» WarCraft 3 / Плохо работает способность

Похожие вопросы:

ответ
Думал использовать чисто для экономии времени. По хорошему конечно надо самому написать системки, да все руки не доходят.
Может тогда подскажите, есть ли готовые более менее пригодные для использования. Сам всегда делал через торнадо, разве это уже не модно?
ответ
bifurcated, вот сделал наработку что то в роде того что ты хочеш только желательно доработать... но с этим сам почитай статьи
ах забыл рекомендую делать подобные скилы на основе "Канал"

23

» WarCraft 3 / Триггерная голда

Похожие вопросы:

ответ
Yulia, создаёшь юнита без модели и наносишь ему урон от нужного игрока. Соответственно кол-во золота меняешь в параметрах юнита.
ответ
создай проект, распиши что есть, что нужно сделать, пару скринов, свободные вакансии

23

» WarCraft 3 / Меню кампаний...

Похожие вопросы:

ответ
Меняешь расширение с .w3n на .mpq (хоть простым переименованием) и открываешь архив любым MPQ-едитором (лично я пользовался этим xgm.guru/p/wc3/ladiks-mpq). После экспортируешь оттуда нужную тебе карту.
ответ
Варкрафтитель:
Absolute, Я знаю... Но он же... Уже изменен...
Вот что я тебе скажу. Иногда проще начать с нуля, чем разгребать ошибки. Просто создай новую кампанию , перекопируй старые триггеры. Всяко быстрее выйдет, чем несколько дней разбираться, да и качественнее.
ответ
~8gabriel8:
Это зависит от камер и анимаций. Сначала воспроизводится анимация Birth, которая и представляет приближение, потом Stand, там везде свои камеры. Посмотри в war3me у модели экрана, как там сделано. Подробную статью о работе с камерами в этих моделях не встречал.
Вариант ApEJI про вращение модели вместо кучи камер тоже норм. Типа в Birth вращение сделать. Но у меня, например, не такие высокие навыки в анимировании, чтобы сразу много объектов правильно сдвигать, мне предпочтительнее камер наделать.

23

» WarCraft 3 / Герой

Похожие вопросы:

ответ
так в триггере всё верно же
переносимый предмет типа отсутствует, т.е равен 0
и проданный предмет тоже 0
0 == 0
всё верно
что написал то и получил
ответ
8gabriel8, есть только одно но
твоя система отлавливает любой урон а не только урон с руки
и хз нафига вообще тут 3 триггера
вот статья про отлов урона на гуи
есть 2 способа определить что это урон с руки (ну и мемхак ещё)
  1. давать юниту орб вешающий баф (сферу яда например) и при получении урона проверять наличие этого баффа, если есть баф то значит урон с руки и удаляем баф
  2. использовать скилл рунных браслетов с защитой от магии равной 2
в результате весь получаемый магический урон будет отрицательным
если полученный урон (далее dmg) отрицательный то урон нанесён магией и снимаем юниту dmg*-2 хп (для того чтобы полученный урон не был отрицательным)
ответ
~8gabriel8:
К сожалению, я нашёл лишь условие "количество предметов у юнита" о типе предметов, там нет и речи
Верно, мой косяк. Надо циклом перебирать предметы. Вот карта с триггером и скрин:

23

» WarCraft 3 / Области и триггеры... ещё юниты...

Похожие вопросы:

ответ
Хозяин Миров, боже
делаем дами ауру
потом всем у кого есть баф ауры даём бонусы скрытым спелбуком
когда баф исчезает убираем бонусы
ответ
Maniac_91, область это хэндл а значит утекает
максимального количества областей ограничивается количеством оперативной памяти (до 2 гигов вроде) и максимальным количеством хэндлов (2 в 32 степени)
больше ни чем
EnergyFrost:
Максимум что тебя ожидает- лаги, которые ты получишь из-за утечек, работая с этими областями. Так что старайся не наплодить утечек и все будет окей.
как правило работа со статичными областями не вызывает утечек (если их не копировать)
ограничений на декорации тоже нету к слову (если не юзать устаревший редактор)
ответ
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).

23

» WarCraft 3 / Что то пошло не так

Похожие вопросы:

ответ
А приказ остановиться не пробовали?
ответ
во первых
код после ретурна не выполняется и 2 ретурна писать нельзя
во вторых
ты статьи вообще читал?
в самых начальных статьях по джасс сказано что так писать нельзя
это сказано в самых начальных статьях про локальные переменные
в третьих это не стол заказов
ответ
короче, вот рабочий вариант
смотреть сюда
function Trig_HeroArcheressSkillAFirst_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'ASkA'
endfunction

function HeroArcheressSkillAFirst_SelectGroup takes nothing returns nothing
    if GetUnitAbilityLevel(GetEnumUnit(), 'B006') > 0 then
        call PauseUnit(GetEnumUnit(), true)
        call GroupAddUnit(HeroArcheressSkillAGroup, GetEnumUnit())
        call BJDebugMsg("Стан")
    endif
endfunction

function Trig_HeroArcheressSkillAFirst_Actions takes nothing returns nothing
    local group g = CreateGroup()
    
    set HeroArcheressSkillADammi = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'h003', GetSpellTargetX(), GetSpellTargetY(), bj_UNIT_FACING) //создаем дамми
    call UnitApplyTimedLife(HeroArcheressSkillADammi, 'BTLF', GetUnitAbilityLevel(GetTriggerUnit(), 'ASkA')) //таймер жизни для дамми
    
    call TriggerSleepAction (1.) //из-за ауры увеличил задержку
    //убрал утечки
    call GroupEnumUnitsInRange(g, GetSpellTargetX(), GetSpellTargetY(), 500.00, null)
    call ForGroup(g , function HeroArcheressSkillAFirst_SelectGroup )
    call DestroyGroup(g)
    set g = null
    //
    call TimerStart (HeroArcheressSkillATimer, 1., true, null) //запускаем таймер
endfunction

//===========================================================================
function InitTrig_HeroArcheressSkillABase takes nothing returns nothing
    set gg_trg_HeroArcheressSkillABase = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroArcheressSkillABase, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_HeroArcheressSkillABase, Condition( function Trig_HeroArcheressSkillAFirst_Conditions ) )
    call TriggerAddAction( gg_trg_HeroArcheressSkillABase, function Trig_HeroArcheressSkillAFirst_Actions )
endfunction
globals
    integer HeroArcheressSkillACircle = 0
    timer HeroArcheressSkillATimer = CreateTimer() //таймер
endglobals

function HeroArcheressSkillAFirst_Damage takes nothing returns nothing
    if GetWidgetLife(HeroArcheressSkillADammi) > 0 then //проверяем, жив ли дамми юнит
        call BJDebugMsg("Урон" )
        call UnitDamageTarget(udg_HeroArcheress, GetEnumUnit(), 50, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    else //иначе удаляем его из группы и снимаем паузу
        call PauseUnit(GetEnumUnit(), false)//PauseUnitBJ( false , GetEnumUnit() )
        call GroupRemoveUnit(HeroArcheressSkillAGroup, GetEnumUnit())
        call BJDebugMsg("Выход")
    endif
endfunction

function HeroArcheressSkillAFirst_Actions takes nothing returns nothing
    call ForGroup(HeroArcheressSkillAGroup, function HeroArcheressSkillAFirst_Damage)
endfunction

//===========================================================================
function InitTrig_HeroArcheressSkillAFirst takes nothing returns nothing
    set gg_trg_HeroArcheressSkillAFirst = CreateTrigger(  )
    call TriggerRegisterTimerExpireEvent(gg_trg_HeroArcheressSkillAFirst, HeroArcheressSkillATimer) //событие таймер истекает
    call TriggerAddAction( gg_trg_HeroArcheressSkillAFirst, function HeroArcheressSkillAFirst_Actions )
endfunction

23

» WarCraft 3 / Как выбросить предмет?

Похожие вопросы:

ответ
Опиши что ты хочешь сделать.
ответ
Дать предмету кастом вэлье по номеру игрока при подбирании, если не задано. И проверять при подбирании. Следующая проверка: если кастомное число предмета не равно номеру игрока, то выкидываем.
ответ
событие - герой теряет предмет
условие - предмет которым манипулируют типа (такой т предмет)
действие - виу виу, пж пж.
ответ
еще можно дать нужным юнитам абилку без иконки (например предметную +0 атаки) и проверять что она у них есть
ответ
Вот, слегка модифицировал твой вариант. Лучше, найти какую-нибудь готовую систему, ибо предметы всегда будут перемещаться, да и с полным инвентарем не корректно работает.

23

» WarCraft 3 / Инвентарь

Похожие вопросы:

ответ
Steal nerves:
ответы
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
ответ
avuremybe, с буфером игры (кэш) можно работать так же как с хэш таблицей
FrigatPlay, в буфер игры можно сохранять не только юнитов но и предметы
просто перебираем циклом все предметы и сохраняем в кэш
а потом в следующей карте извлекаем их из кэша
ответ
Alexey103, а зачем менять уровень?
просто создал на основе стандартной и заметил у всех героев стандартную на созданную
у меня всё сработало
судя по всему инвентарь носильщика это просто обёртка над стандартным инвентарём
т.е. он содержит в себе стандартную способность "Предметы (Герой)"
и при проверки на уровень стандартной "Предметы (Герой)" выдаёт что она есть т.к. она содержится в носильщике
но если проверять на уровень нестандартной "Предметы (Герой)" то выдаст что её нету
я добавил карту пример
если приказать подобрать предмет герою который владеет способностью hero inventory (нестандартная способность на основе "Предметы (Герой)") то напишет hero
иначе unit
ответ
А если кратко, то перебирай при поднятии предмета все слоты инвентаря. Если уже есть такой предмет - делай что-то с лишней копией. Уничтожай, роняй с грозной надписью и так далее. Все это прекрасно и спокойно реализуется на гуи. Это если тебе именно одинаковые предметы не нравятся. С классами вещей там больше заморочек.

23

» WarCraft 3 / Сброс кд

Похожие вопросы:

ответ
вроде как кулдаун не запускается, если в момент применения способности юнита переместить триггером в какое-нибудь другое место (например, на несколько точек вправо)

23

» WarCraft 3 / Проблема с триггером.

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Держи. Чтобы проверить нажми ESC в игре.
раскрыть
потребовалось полторы минуты
ответ
старый запрос
ответ
Проблема решилась, после соединения с администратором карта заработала и сохранилась. И на следующей карте соединения уже нет. Спасибо.
ответ
Попробуй конвертировать через war3 image extracror, а в фш сохрани картинку как 32 битную. Ну и разумеется разрешение 512х512
Когда будешь вставлять в карту, закинь картинку в мапу , а еще тебе понадобится LoadScreen.mds. В свойствах карты на загрузочный экран установишь LoadScreen.mdx, ну это я так, на всякий случай. Саму картинку нужно назвать FullScreen.blp

23

» WarCraft 3 / Миникарта

Принятый ответ
Похожие вопросы:

ответ
ответ
Ладно, поставил разрешение в Варке на максимум, более или менее нормальный масштаб миникарт получается, всем спасибо за попытки помочь.
ответ
Импортируй черную текстуру с путём "war3mapMap.blp".
ответ
  1. файл миникарты есть картинка, которую можно подгрузить в карту
  1. есть нативки для регулировки границ камеры, они же вроде и миникарту уменьшают
  1. это галка в настройках карты самой

23

» WarCraft 3 / Жанр карты

Похожие вопросы:

ответ
Ни разу не делал карты "чисто стандартного жанра". Т.е. общий жанр определить можно всегда, но нужно чтобы можно было выделить что-то, чем твоя карта реально отличается от себе подобных.
Вот, глянь чуть (щас набегут хомячки с возгласами ОЛОЛО РЕКЛАМА ДОК БЛИН КАК НЕ СТЫДНА)
ответ
Немного добавлю..
Tag (Tag Map) - Особенный жанр карт, в котором существует две команды - убегающие и догоняющие. Убегающие должны бежать от догоняющих, при этом они могут строить защитные базы, чтобы избежать поимки. Если убегающие выживут на протяжении заданного времени, то они выигрывают. Если догоняющие убивают всех убегающих до истечения времени, побеждают они. Выбывшие убегающие обычно помечаются как флаги или чёрные энты и воскрешаются, если они были атакованы или один из других убегающих достиг центра карты.
Примеры карт: Петросянщина, Вампиризм, Маньяк с пилой
Mini-Game - Жанр, включающий в себя карты обычно маленьких размеров и узконаправленные. Есть сборники мини-игр, которые включают в себя сразу несколько маленьких игрушек различного жанра. По своему устройству обычно несложные.
Примеры карт: Worm War, Death Sheep, Azeroth Grand Prix
Simulator - Не особо распространённый жанр карт, который содержит детализированное управление какой-либо аспектом карты. Его порой нетрудно спутать с RPG, но есть свои отличия.
Примеры карт: Ashenvale Archers, Fantasy Life, Jungle Trolls Reborn
Cinematic - Постановочные ролики, видео. Может даже и мини-фильмы.
Примеры карт: DDay:Judgement the Movie, matso TROY
Hero Arena - игроки выбирают по одному герою и помещаются на арену. Цель в отличие от AOS исключительно в убийстве героев вражеских игроков, а не уничтожении Базы врага.
Примеры карт: Angel arena
Сastle defense - игроки должны защищать определенное здание в течение определенного времени или количества волн монстров.
Примеры карт: X Hero Siege, Castle Fight, Lotr Lord of the Rings Castle Wars
Можно также делить общие жанры на категории: например:
  • Melee - ladder/custom;
  • Tower defense - Cooperative/ Survival/Tower wars$
ответ
Нестандартная арена.
ответ
Зачем вообще что-то делать, если в этих жанрах уже и так миллион карт?

23

» WarCraft 3 / Видимая невидимость

Похожие вопросы:

ответ
Blacksmith0410:
также не забудь удалять способность у умерших в стоге. выбери ответ и закрой вопрос =)
ответ
изменять триггерно границы камеры
подробнее в статьях и функшионлисте
кнопка статьи вверху
ответ
держи
ответ
avuremybe, сокрытие неможет быть локальным, будет десинх.
Сделай карту просто разведенной, карту будет видно а юнитов нет.